'''
    作者：刘妍
    日期：15/05/2020
    版本：1.0
    功能：根据空气质量分指数及对应的污染项目浓度限值表，计算出对应的空气质量指数

    需求分析：计算空气质量指数AQI
    1 空气质量指数AQI就是若干个分指数IAQI取最大值
    2 每种污染物的空气质量分指数是根据测量值进行的线性变换
    3 已知测量值，需要进行公式计算
'''


# 自定义函数 公式计算
def cal_iaqi(iaqi_lo, iaqi_hi, bp_lo, bp_hi, cp):
    iaqi = (iaqi_hi - iaqi_lo) * (cp - bp_lo) / (bp_hi - bp_lo) + iaqi_lo
    return iaqi

# 对每种污染物的空气质量分指数进行说明
def cal_pm_iaqi(pm_val):
    '''
    计算PM2.5的空气质量分指数IAQI
    '''
    # pm_val是测量值
    if 0 <= pm_val <= 35:
        iaqi = cal_iaqi(0, 50, 0, 35, pm_val)
    elif 36 <= pm_val <= 75:
        iaqi = cal_iaqi(50, 100, 35, 75, pm_val)
    elif 76 <= pm_val <= 116:
        iaqi = cal_iaqi(100, 150, 75, 115, pm_val)
    return iaqi

# 一氧化碳
def cal_co_iaqi(co_val):
    '''
    计算CO的空气质量分指数IAQI
    :param co_val: 
    :return: 
    '''
    if 0 <= co_val <= 2:
        iaqi = cal_iaqi(0, 50, 0, 2, co_val)
    elif 3 <= co_val <= 4:
        iaqi = cal_iaqi(50, 100, 2, 4, co_val)
    elif 5 <= co_val <= 14:
        iaqi = cal_iaqi(100, 150, 4, 14, co_val)
    return iaqi


# 空气质量指数
def cal_aqi(param_list):
    '''
    计算空气质量指数AQI
    :param data_list:
    :return:
    '''
    pm_val = param_list[0]
    co_val = param_list[1]

    pm_iaqi = cal_pm_iaqi(pm_val)
    co_iaqi = cal_co_iaqi(co_val)

    iaqi_list = []
    iaqi_list.append(pm_iaqi)
    iaqi_list.append(co_iaqi)

    aqi = max(iaqi_list)
    return aqi

def main():
    print('请输入以下数据，用空格分割')
    # input输入得到的数据是字符串类型
    data_str = input('1.PM2.5 2.CO：')
    # 用split方法将空格分割的数据依次存入列表中
    data_list = data_str.split(' ')
    pm_val = eval(data_list[0])
    co_val = eval(data_list[1])

    param_list = []
    param_list.append(pm_val)
    param_list.append(co_val)

    # 调用AQI函数完成空气质量指数的计算
    aqi_val = cal_aqi(param_list)
    print('空气质量指数为：{}'.format(aqi_val))


if __name__ == '__main__':
    main()